export default class WebsocketClient{
    static instance; //设置连接成功的操作

    //单例模式创建一个对象信息的内容，判断是否创建，如果创建了此对象，就无需重复创建了。
    static get Instance(){
        if(!this.instance){
            this.instance = new WebsocketClient();
        }

        return this.instance;//
    }

    // 为实例化ws对象创建内容方法
    ws = null;//

    connected = null;//连接成功的标识

    reConnected = 0;//记录与服务器重新连接的次数。

    timerId = null;//掉线重新连接的服务器ID



    connect(){
        //判断浏览器是否支持webSocket 
        if(!window.WebSocket){
            console.log("浏览器不支持websocket的内容");
        }
        //支持的话，开始连接启动websocket方法
        if("WebSocket" in window){
            //创建websocket连接对象，指定要连接的服务器的信息
            this.ws = new WebSocket("ws://localhost:3001/socketTest");//连接express后端服务信息。
   
        }else{
            console.info("您的浏览器不支持websocket,请选择火狐或者谷歌浏览器");
        }

        //监听客户端和浏览器连接成功
        this.ws.onopen = ()=>{
            this.connected = true;//连接成功

            //重新连接次数累计为0
            this.reConnected = 0;

            // 连接成功清除定时器
            clearInterval(this.timerId);
            console.log("客户端与服务端连接成功！！！！");
        }

        this.ws.onclose = ()=>{
            this.connected = false;//断开连接

            this.reConnected++;//重新连接次数+1

            console.info("服务器断开了连接123123");

            //监听到服务器断开后，每隔一段时间，我们自动请求服务期的连接
            this.timerId = setInterval(()=>{
                this.connect();
            },this.reConnected*1000);
        }


        // this.ws.onmessage = (res)=>{
        //     console.log("服务端返回数据了",JSON.stringify(res));
        // }
    }

    send(request){
        
        if(this.connected){
            this.ws.send(JSON.stringify(request))
        }else{
            this.reConnected++;//重新连接次数+1

            console.info("服务器断开了连接");

            //监听到服务器断开后，每隔一段时间，我们自动请求服务期的连接
            this.timerId = setInterval(()=>{
                this.ws.send(JSON.stringify(request));
            },this.reConnected*1000);
        }
    }
}